home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / io / Win32FileSystem.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  7.0 KB  |  517 lines

  1. package java.io;
  2.  
  3. import java.security.AccessController;
  4. import java.util.Locale;
  5. import sun.security.action.GetPropertyAction;
  6.  
  7. class Win32FileSystem extends FileSystem {
  8.    private final char slash = ((String)AccessController.doPrivileged(new GetPropertyAction("file.separator"))).charAt(0);
  9.    private final char altSlash;
  10.    private final char semicolon = ((String)AccessController.doPrivileged(new GetPropertyAction("path.separator"))).charAt(0);
  11.    private static String[] driveDirCache = new String[26];
  12.    private ExpiringCache cache = new ExpiringCache();
  13.    private ExpiringCache prefixCache = new ExpiringCache();
  14.  
  15.    public Win32FileSystem() {
  16.       this.altSlash = (char)(this.slash == '\\' ? 47 : 92);
  17.    }
  18.  
  19.    private boolean isSlash(char var1) {
  20.       return var1 == '\\' || var1 == '/';
  21.    }
  22.  
  23.    private boolean isLetter(char var1) {
  24.       return var1 >= 'a' && var1 <= 'z' || var1 >= 'A' && var1 <= 'Z';
  25.    }
  26.  
  27.    private String slashify(String var1) {
  28.       return var1.length() > 0 && var1.charAt(0) != this.slash ? this.slash + var1 : var1;
  29.    }
  30.  
  31.    public char getSeparator() {
  32.       return this.slash;
  33.    }
  34.  
  35.    public char getPathSeparator() {
  36.       return this.semicolon;
  37.    }
  38.  
  39.    private int normalizePrefix(String var1, int var2, StringBuffer var3) {
  40.       int var4;
  41.       for(var4 = 0; var4 < var2 && this.isSlash(var1.charAt(var4)); ++var4) {
  42.       }
  43.  
  44.       char var5;
  45.       if (var2 - var4 >= 2 && this.isLetter(var5 = var1.charAt(var4)) && var1.charAt(var4 + 1) == ':') {
  46.          var3.append(var5);
  47.          var3.append(':');
  48.          var4 += 2;
  49.       } else {
  50.          var4 = 0;
  51.          if (var2 >= 2 && this.isSlash(var1.charAt(0)) && this.isSlash(var1.charAt(1))) {
  52.             var4 = 1;
  53.             var3.append(this.slash);
  54.          }
  55.       }
  56.  
  57.       return var4;
  58.    }
  59.  
  60.    private String normalize(String var1, int var2, int var3) {
  61.       if (var2 == 0) {
  62.          return var1;
  63.       } else {
  64.          if (var3 < 3) {
  65.             var3 = 0;
  66.          }
  67.  
  68.          char var5 = this.slash;
  69.          StringBuffer var6 = new StringBuffer(var2);
  70.          int var4;
  71.          if (var3 == 0) {
  72.             var4 = this.normalizePrefix(var1, var2, var6);
  73.          } else {
  74.             var4 = var3;
  75.             var6.append(var1.substring(0, var3));
  76.          }
  77.  
  78.          while(var4 < var2) {
  79.             char var7 = var1.charAt(var4++);
  80.             if (!this.isSlash(var7)) {
  81.                var6.append(var7);
  82.             } else {
  83.                while(var4 < var2 && this.isSlash(var1.charAt(var4))) {
  84.                   ++var4;
  85.                }
  86.  
  87.                if (var4 == var2) {
  88.                   int var8 = var6.length();
  89.                   if (var8 == 2 && var6.charAt(1) == ':') {
  90.                      var6.append(var5);
  91.                   } else if (var8 == 0) {
  92.                      var6.append(var5);
  93.                   } else if (var8 == 1 && this.isSlash(var6.charAt(0))) {
  94.                      var6.append(var5);
  95.                   }
  96.                   break;
  97.                }
  98.  
  99.                var6.append(var5);
  100.             }
  101.          }
  102.  
  103.          String var9 = var6.toString();
  104.          return var9;
  105.       }
  106.    }
  107.  
  108.    public String normalize(String var1) {
  109.       int var2 = var1.length();
  110.       char var3 = this.slash;
  111.       char var4 = this.altSlash;
  112.       char var5 = 0;
  113.  
  114.       for(int var6 = 0; var6 < var2; ++var6) {
  115.          char var7 = var1.charAt(var6);
  116.          if (var7 == var4) {
  117.             return this.normalize(var1, var2, var5 == var3 ? var6 - 1 : var6);
  118.          }
  119.  
  120.          if (var7 == var3 && var5 == var3 && var6 > 1) {
  121.             return this.normalize(var1, var2, var6 - 1);
  122.          }
  123.  
  124.          if (var7 == ':' && var6 > 1) {
  125.             return this.normalize(var1, var2, 0);
  126.          }
  127.  
  128.          var5 = var7;
  129.       }
  130.  
  131.       if (var5 == var3) {
  132.          return this.normalize(var1, var2, var2 - 1);
  133.       } else {
  134.          return var1;
  135.       }
  136.    }
  137.  
  138.    public int prefixLength(String var1) {
  139.       char var2 = this.slash;
  140.       int var3 = var1.length();
  141.       if (var3 == 0) {
  142.          return 0;
  143.       } else {
  144.          char var4 = var1.charAt(0);
  145.          char var5 = var3 > 1 ? var1.charAt(1) : 0;
  146.          if (var4 == var2) {
  147.             return var5 == var2 ? 2 : 1;
  148.          } else if (this.isLetter(var4) && var5 == ':') {
  149.             return var3 > 2 && var1.charAt(2) == var2 ? 3 : 2;
  150.          } else {
  151.             return 0;
  152.          }
  153.       }
  154.    }
  155.  
  156.    public String resolve(String var1, String var2) {
  157.       int var3 = var1.length();
  158.       if (var3 == 0) {
  159.          return var2;
  160.       } else {
  161.          int var4 = var2.length();
  162.          if (var4 == 0) {
  163.             return var1;
  164.          } else {
  165.             byte var6 = 0;
  166.             int var7 = var3;
  167.             if (var4 > 1 && var2.charAt(0) == this.slash) {
  168.                if (var2.charAt(1) == this.slash) {
  169.                   var6 = 2;
  170.                } else {
  171.                   var6 = 1;
  172.                }
  173.  
  174.                if (var4 == var6) {
  175.                   if (var1.charAt(var3 - 1) == this.slash) {
  176.                      return var1.substring(0, var3 - 1);
  177.                   }
  178.  
  179.                   return var1;
  180.                }
  181.             }
  182.  
  183.             if (var1.charAt(var3 - 1) == this.slash) {
  184.                var7 = var3 - 1;
  185.             }
  186.  
  187.             int var8 = var7 + var4 - var6;
  188.             Object var9 = null;
  189.             char[] var10;
  190.             if (var2.charAt(var6) == this.slash) {
  191.                var10 = new char[var8];
  192.                var1.getChars(0, var7, var10, 0);
  193.                var2.getChars(var6, var4, var10, var7);
  194.             } else {
  195.                var10 = new char[var8 + 1];
  196.                var1.getChars(0, var7, var10, 0);
  197.                var10[var7] = this.slash;
  198.                var2.getChars(var6, var4, var10, var7 + 1);
  199.             }
  200.  
  201.             return new String(var10);
  202.          }
  203.       }
  204.    }
  205.  
  206.    public String getDefaultParent() {
  207.       return "" + this.slash;
  208.    }
  209.  
  210.    public String fromURIPath(String var1) {
  211.       String var2 = var1;
  212.       if (var1.length() > 2 && var1.charAt(2) == ':') {
  213.          var2 = var1.substring(1);
  214.          if (var2.length() > 3 && var2.endsWith("/")) {
  215.             var2 = var2.substring(0, var2.length() - 1);
  216.          }
  217.       } else if (var1.length() > 1 && var1.endsWith("/")) {
  218.          var2 = var1.substring(0, var1.length() - 1);
  219.       }
  220.  
  221.       return var2;
  222.    }
  223.  
  224.    public boolean isAbsolute(File var1) {
  225.       int var2 = var1.getPrefixLength();
  226.       return var2 == 2 && var1.getPath().charAt(0) == this.slash || var2 == 3;
  227.    }
  228.  
  229.    protected native String getDriveDirectory(int var1);
  230.  
  231.    private static int driveIndex(char var0) {
  232.       if (var0 >= 'a' && var0 <= 'z') {
  233.          return var0 - 97;
  234.       } else {
  235.          return var0 >= 'A' && var0 <= 'Z' ? var0 - 65 : -1;
  236.       }
  237.    }
  238.  
  239.    private String getDriveDirectory(char var1) {
  240.       int var2 = driveIndex(var1);
  241.       if (var2 < 0) {
  242.          return null;
  243.       } else {
  244.          String var3 = driveDirCache[var2];
  245.          if (var3 != null) {
  246.             return var3;
  247.          } else {
  248.             var3 = this.getDriveDirectory(var2 + 1);
  249.             driveDirCache[var2] = var3;
  250.             return var3;
  251.          }
  252.       }
  253.    }
  254.  
  255.    private String getUserPath() {
  256.       return this.normalize(System.getProperty("user.dir"));
  257.    }
  258.  
  259.    private String getDrive(String var1) {
  260.       int var2 = this.prefixLength(var1);
  261.       return var2 == 3 ? var1.substring(0, 2) : null;
  262.    }
  263.  
  264.    public String resolve(File var1) {
  265.       String var2 = var1.getPath();
  266.       int var3 = var1.getPrefixLength();
  267.       if (var3 == 2 && var2.charAt(0) == this.slash) {
  268.          return var2;
  269.       } else if (var3 == 3) {
  270.          return var2;
  271.       } else if (var3 == 0) {
  272.          return this.getUserPath() + this.slashify(var2);
  273.       } else if (var3 == 1) {
  274.          String var13 = this.getUserPath();
  275.          String var14 = this.getDrive(var13);
  276.          return var14 != null ? var14 + var2 : var13 + var2;
  277.       } else if (var3 == 2) {
  278.          String var4 = this.getUserPath();
  279.          String var5 = this.getDrive(var4);
  280.          if (var5 != null && var2.startsWith(var5)) {
  281.             return var4 + this.slashify(var2.substring(2));
  282.          } else {
  283.             char var6 = var2.charAt(0);
  284.             String var7 = this.getDriveDirectory(var6);
  285.             if (var7 != null) {
  286.                String var9 = "" + var6 + ':' + var7 + this.slashify(var2.substring(2));
  287.                SecurityManager var10 = System.getSecurityManager();
  288.  
  289.                try {
  290.                   if (var10 != null) {
  291.                      var10.checkRead(var9);
  292.                   }
  293.  
  294.                   return var9;
  295.                } catch (SecurityException var12) {
  296.                   throw new SecurityException("Cannot resolve path " + var2);
  297.                }
  298.             } else {
  299.                return var6 + ":" + this.slashify(var2.substring(2));
  300.             }
  301.          }
  302.       } else {
  303.          throw new InternalError("Unresolvable path: " + var2);
  304.       }
  305.    }
  306.  
  307.    public String canonicalize(String var1) throws IOException {
  308.       int var2 = var1.length();
  309.       if (var2 == 2 && this.isLetter(var1.charAt(0)) && var1.charAt(1) == ':') {
  310.          char var8 = var1.charAt(0);
  311.          return var8 >= 'A' && var8 <= 'Z' ? var1 : "" + (char)(var8 - 32) + ':';
  312.       } else if (var2 == 3 && this.isLetter(var1.charAt(0)) && var1.charAt(1) == ':' && var1.charAt(2) == '\\') {
  313.          char var7 = var1.charAt(0);
  314.          return var7 >= 'A' && var7 <= 'Z' ? var1 : "" + (char)(var7 - 32) + ':' + '\\';
  315.       } else if (!useCanonCaches) {
  316.          return this.canonicalize0(var1);
  317.       } else {
  318.          String var3 = this.cache.get(var1);
  319.          if (var3 == null) {
  320.             String var4 = null;
  321.             Object var5 = null;
  322.             if (useCanonPrefixCache) {
  323.                var4 = parentOrNull(var1);
  324.                if (var4 != null) {
  325.                   String var9 = this.prefixCache.get(var4);
  326.                   if (var9 != null) {
  327.                      String var6 = var1.substring(1 + var4.length());
  328.                      var3 = this.canonicalizeWithPrefix(var9, var6);
  329.                      this.cache.put(var4 + File.separatorChar + var6, var3);
  330.                   }
  331.                }
  332.             }
  333.  
  334.             if (var3 == null) {
  335.                var3 = this.canonicalize0(var1);
  336.                this.cache.put(var1, var3);
  337.                if (useCanonPrefixCache && var4 != null) {
  338.                   String var10 = parentOrNull(var3);
  339.                   if (var10 != null) {
  340.                      File var11 = new File(var3);
  341.                      if (var11.exists() && !var11.isDirectory()) {
  342.                         this.prefixCache.put(var4, var10);
  343.                      }
  344.                   }
  345.                }
  346.             }
  347.          }
  348.  
  349.          assert this.canonicalize0(var1).equalsIgnoreCase(var3);
  350.  
  351.          return var3;
  352.       }
  353.    }
  354.  
  355.    protected native String canonicalize0(String var1) throws IOException;
  356.  
  357.    protected String canonicalizeWithPrefix(String var1, String var2) throws IOException {
  358.       return this.canonicalizeWithPrefix0(var1, var1 + File.separatorChar + var2);
  359.    }
  360.  
  361.    protected native String canonicalizeWithPrefix0(String var1, String var2) throws IOException;
  362.  
  363.    static String parentOrNull(String var0) {
  364.       if (var0 == null) {
  365.          return null;
  366.       } else {
  367.          char var1 = File.separatorChar;
  368.          byte var2 = 47;
  369.          int var3 = var0.length() - 1;
  370.          int var4 = var3;
  371.          int var5 = 0;
  372.  
  373.          for(int var6 = 0; var4 > 0; --var4) {
  374.             char var7 = var0.charAt(var4);
  375.             if (var7 == '.') {
  376.                ++var5;
  377.                if (var5 >= 2) {
  378.                   return null;
  379.                }
  380.  
  381.                if (var6 == 0) {
  382.                   return null;
  383.                }
  384.             } else {
  385.                if (var7 == var1) {
  386.                   if (var5 == 1 && var6 == 0) {
  387.                      return null;
  388.                   }
  389.  
  390.                   if (var4 != 0 && var4 < var3 - 1 && var0.charAt(var4 - 1) != var1 && var0.charAt(var4 - 1) != var2) {
  391.                      return var0.substring(0, var4);
  392.                   }
  393.  
  394.                   return null;
  395.                }
  396.  
  397.                if (var7 == var2) {
  398.                   return null;
  399.                }
  400.  
  401.                if (var7 == '*' || var7 == '?') {
  402.                   return null;
  403.                }
  404.  
  405.                ++var6;
  406.                var5 = 0;
  407.             }
  408.          }
  409.  
  410.          return null;
  411.       }
  412.    }
  413.  
  414.    public native int getBooleanAttributes(File var1);
  415.  
  416.    public native boolean checkAccess(File var1, int var2);
  417.  
  418.    public native long getLastModifiedTime(File var1);
  419.  
  420.    public native long getLength(File var1);
  421.  
  422.    public native boolean setPermission(File var1, int var2, boolean var3, boolean var4);
  423.  
  424.    public native boolean createFileExclusively(String var1) throws IOException;
  425.  
  426.    public boolean delete(File var1) {
  427.       this.cache.clear();
  428.       this.prefixCache.clear();
  429.       return this.delete0(var1);
  430.    }
  431.  
  432.    protected native boolean delete0(File var1);
  433.  
  434.    public native String[] list(File var1);
  435.  
  436.    public native boolean createDirectory(File var1);
  437.  
  438.    public boolean rename(File var1, File var2) {
  439.       this.cache.clear();
  440.       this.prefixCache.clear();
  441.       return this.rename0(var1, var2);
  442.    }
  443.  
  444.    protected native boolean rename0(File var1, File var2);
  445.  
  446.    public native boolean setLastModifiedTime(File var1, long var2);
  447.  
  448.    public native boolean setReadOnly(File var1);
  449.  
  450.    private boolean access(String var1) {
  451.       try {
  452.          SecurityManager var2 = System.getSecurityManager();
  453.          if (var2 != null) {
  454.             var2.checkRead(var1);
  455.          }
  456.  
  457.          return true;
  458.       } catch (SecurityException var3) {
  459.          return false;
  460.       }
  461.    }
  462.  
  463.    private static native int listRoots0();
  464.  
  465.    public File[] listRoots() {
  466.       int var1 = listRoots0();
  467.       int var2 = 0;
  468.  
  469.       for(int var3 = 0; var3 < 26; ++var3) {
  470.          if ((var1 >> var3 & 1) != 0) {
  471.             if (!this.access((char)(65 + var3) + ":" + this.slash)) {
  472.                var1 &= ~(1 << var3);
  473.             } else {
  474.                ++var2;
  475.             }
  476.          }
  477.       }
  478.  
  479.       File[] var7 = new File[var2];
  480.       int var4 = 0;
  481.       char var5 = this.slash;
  482.  
  483.       for(int var6 = 0; var6 < 26; ++var6) {
  484.          if ((var1 >> var6 & 1) != 0) {
  485.             var7[var4++] = new File((char)(65 + var6) + ":" + var5);
  486.          }
  487.       }
  488.  
  489.       return var7;
  490.    }
  491.  
  492.    public long getSpace(File var1, int var2) {
  493.       if (var1.exists()) {
  494.          File var3 = var1.isDirectory() ? var1 : var1.getParentFile();
  495.          return this.getSpace0(var3, var2);
  496.       } else {
  497.          return 0L;
  498.       }
  499.    }
  500.  
  501.    private native long getSpace0(File var1, int var2);
  502.  
  503.    public int compare(File var1, File var2) {
  504.       return var1.getPath().compareToIgnoreCase(var2.getPath());
  505.    }
  506.  
  507.    public int hashCode(File var1) {
  508.       return var1.getPath().toLowerCase(Locale.ENGLISH).hashCode() ^ 1234321;
  509.    }
  510.  
  511.    private static native void initIDs();
  512.  
  513.    static {
  514.       initIDs();
  515.    }
  516. }
  517.